package com.example.code.juc;

/**
 * 指令重排demo
 *
 * @since 2021-04-05
 */
public class VolatileReSortDemo {
    int a = 0;
    boolean flag = false;

    public void method01() {
        a = 1; // 语句1
        flag = true; // 语句2
    }

    // note 多线程环境中线程交替执行，由于编译器优化的存在，两个线程中使用的变量能否保证一致性是无法确定的，结果无法预测
    public void method02() {
        if (flag) {
            a = a + 5;
        }
        System.out.println(a);
        // 多线程下 语句1和语句2顺序可能会颠倒，那method02的结果可能是6，也可能是5
    }
}
